Цитата(mehatron @ 13.9.2012, 11:59)

http://thermasens.com.ua/index.php/category/26...поставили вместо 0..10 В Белимо эти 3х-позиционные Данфосы. Но у меня есть возможность переписать программу. Подскажите как правильно реализовать..?
Я бы попробовал такой вариант:
1.Аналоговых вход AI(входной сигнал - задание). Естественно как источник задания можно поставить и ПИД.
2.Реверсивный счётчик RC (Расчётное положение задвижки).
3.Два компаратора C1 и C2(AI>RC и AI<RC)
4.Генератор импульсов
5.Мультиплексор (переключатель сигнала генератора)
6.Два дискретных входа (Задвижка закрыта DI1 и задвижка открыта DI2). От конечных выключателей задвижки.
7.Два дискретных выхода ("Больше" Q1 и "Меньше" Q2).
Описываю общий принцип, не касаясь масштабирования.
Компараторы сравнивают AI и RC.
Если например, AI>RC, то срабатывает компаратор С1 и соединяет выход генератора с счётным входом счётчика RC и через блок задержки отключения с Q1"Больше".
Генератор формирует импульсы с наполнением 90%.
Счётчик последовательно считает эти импульсы, увеличивая своё значение.
На дискретном выходе Q1"Больше" импульсы за счёт задержки (10% периода импульса) сливаются в один непрерывный сигнал. Угол поворота задвижки будет пропорционален количеству переданных на выход импульсов генератора.
Когда RC увеличит своё значение до AI (или AI уменьшится до текущего значения RC) компаратор С1 отключится. Соответственно сигнал на выходе Q1 "Больше" пропадёт.
Если например, AI<RC, то срабатывает компаратор С2 и соединяет выход генератора с счётным входом счётчика RC и через блок задержки отключения с Q2"Меньше", а также даёт сигнал на вход изменения направления счёта.
Счётчик последовательно считает импульсы генератора, уменьшая своё значение.
На дискретном выходе Q2"Меньше" импульсы за счёт задержки (10% периода импульса) сливаются в один непрерывный сигнал.
Когда RC уменьшит своё значение до AI (или AI увеличится до текущего значения RC) компаратор С2 отключится. Соответственно сигнал на выходе Q2 "Меньше" пропадёт.
Период импульсов генератора выбирается чуть больше, чем полное время хода привода/диапазон значения AI.
Пример: 3мин/1000=0,18сек. Выбираем период T=0,19сек.
Нам это даёт то, что при значениях входа 0В или 10В задвижка гарантировано дойдёт до крайнего положения, и по полученным сигналам "Задвижка закрыта" DI1 или "Задвижка открыта" DI2, мы сможем переустановить значение счётчика соответственно либо на 0, либо на верхнее значение диапазона AI.
Правильное расчётное положение задвижки, хранимое в счётчике, будет получено при первом же, после запуска системы, крайнем положении задвижки. Далее, при периодических крайних положениях будет корректироваться набежавшая за счёт механики погрешность.